// Copyright XXX Inc.  All rights reserved.
// 许可证
// 作者：软件1902冯若轩

// 本软件提供自动生成中小学数学卷子的功能，生成的试卷保存在相应账号的文件夹下。
// 该文件是教师用户类的定义及试卷生成相关函数的声明

#ifndef PAPER_TEACHER_H_
#define PAPER_TEACHER_H_

#include <list>

#include "database.h"

namespace paper {
namespace teacher {

// 生成大小范围为[min,max]的num个不重复数，存放在一个list中返回
std::list<int> GenerateRandomList(int min, int max, int num);
// 生成一道type类型的题目，题目以string类型返回
std::string MakeQuestion(char type);

// 教师用户类是用户的主体部分，其提供登录、登录后界面、切换类型、
// 生成试卷和题目查重的函数，并提供调试函数Test
class Teacher {
 public:
  // 生成时设置各成员变量为初始值
  Teacher();

  // 登录函数，all_user为账号信息数据库的指针，通过该指针
  // 与数据库联系，从而判断登录是否成功，并进入其后的界面
  void Login(paper::database::Database* all_user);
  // 登录后界面函数，不断重复生成试卷和切换类型询问
  void AfterLogin();
  // 切换类型函数，可切换至小学、初中和高中
  void SelectMode();
  // 生成试卷函数，根据输入的题目数和账号类型，生成试卷
  void MakePaper();
  // 退出登录前的初始化，将各成员变量重置为登录前状态
  void LogoutInit();
  // 题目查重，question为需要查重的题目，返回true即为存在重复
  bool CheckRepeat(std::string question);
  // 调试函数，打印已出的题目数和全部题目
  void Test();

 private:
  // 该教师用户的名字
  std::string name_;
  // 该教师用户当前选择的试卷类型，其中，
  // X表示小学，C表示初中，G表示高中，N表示未选择
  char mode_;
  // 该用户当前选择的类型的中文名称
  std::string mode_name_;
  // 用户登录成功标志
  // true表示已登录
  // false表示未登录
  bool already_login_;
  // 用户请求退出登录标志
  bool request_logout_;
  // 该用户出过的全部题目
  std::vector<std::string> all_question_;
};
}  // namespace teacher
}  // namespace paper

#endif  // PAPER_TEACHER_H_
